aboutsummaryrefslogtreecommitdiff
path: root/pages/api/consumet/episode/[id].js
blob: 60bb4fb615071c58a43e2e5bc620f4340cf70298 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import axios from "axios";
import cacheData from "memory-cache";

const API_URL = process.env.API_URI;

export default async function handler(req, res) {
  try {
    const id = req.query.id;
    const dub = req.query.dub || false;

    const providers = ["enime", "gogoanime"];
    const datas = [];

    const cached = cacheData.get(id + dub);
    if (cached) {
      return res.status(200).json(cached);
    } else {
      async function fetchData(provider) {
        try {
          const data = await fetch(
            dub && provider === "gogoanime"
              ? `${API_URL}/meta/anilist/info/${id}?dub=true`
              : `${API_URL}/meta/anilist/info/${id}?provider=${provider}`
          ).then((res) => {
            if (!res.ok) {
              switch (res.status) {
                case 404: {
                  return null;
                }
              }
            }
            return res.json();
          });
          if (data.episodes.length > 0) {
            datas.push({
              providerId: provider,
              episodes: dub ? data.episodes : data.episodes.reverse(),
            });
          }
        } catch (error) {
          console.error(
            `Error fetching data for provider '${provider}':`,
            error
          );
        }
      }
      if (dub === false) {
        await Promise.all(providers.map((provider) => fetchData(provider)));
      } else {
        await fetchData("gogoanime");
      }

      if (datas.length === 0) {
        return res.status(404).json({ message: "Anime not found" });
      } else {
        cacheData.put(id + dub, { data: datas }, 1000 * 60 * 60 * 15); // 15 minutes
        res.status(200).json({ data: datas });
      }
    }
  } catch (error) {
    res.status(500).json({ error });
  }
}